//显示小图片(int)
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main()
{
	//打开lcd
	int lcd_fd;
	lcd_fd = open("/dev/fb0", O_RDWR);
	if(-1 == lcd_fd)
	{
		perror("open lcd failed!\n");
		return -1;
	}
	else
	{
		printf("open lcd success!\n");
	}
	//打开图片
	int bmp_fd;
	bmp_fd = open("./xiaotu.bmp", O_RDONLY);
	if(-1 == bmp_fd)
	{
		perror("open xiaotu failed!\n");
		return -1;
	}
	
	//利用头54个字节，获得图片的宽和高
	char head[54];
	read(bmp_fd, head, 54);
	int w,h;
	w = *((int *)&head[18]);
	h = *((int *)&head[22]);
	printf("w=%d,h=%d\n",w,h);
	
	//偏移54个字节，去掉头信息
	lseek(bmp_fd, 54, SEEK_SET);
	
	//定义图片像素数据缓冲区
	char bmp_buf[w*h*3];
	read(bmp_fd, bmp_buf, sizeof(bmp_buf));
	
	//讲24位bmp图片像素转换为32位
	int buf32[w*h];
	int i;
	for(i=0; i<w*h; i++)
	{
		buf32[i] = bmp_buf[0+i*3]<<0 | bmp_buf[1+i*3]<<8 | bmp_buf[2+i*3]<<16 | 0x00<<24;
	}
	
	//翻转图片
	int buffz[800*480];
	int x,y;
	int x0=150,y0=100;
	for(y=0;y<h;y++)
	{
		for(x=0;x<w;x++)
		{
			buffz[800*(y0+y)+x0+x] = buf32[w*(h-1-y)+x];
		}
	}
	
	//讲颜色数据写入lcd
	write(lcd_fd, buffz, sizeof(buffz));
	//关闭lcd
	close(lcd_fd);
	close(bmp_fd);
	
	return 0;
}
